﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ibba.src.DataAccess;
using System.Data;
using ibba.src.global;
using ibba.src.norisk.BusinessEntities;

namespace ibba.src.norisk.DataAccess
{
    public class ParametrosReprocessamentoDb : DataAccessBase
    {
        public List<BusinessEntities.JustificativaReprocessamento> ObterJustificativaReprocessamento()
        {
            List<BusinessEntities.JustificativaReprocessamento> retorno = new List<BusinessEntities.JustificativaReprocessamento>();

            List<IDataParameter> parametros = new List<IDataParameter>();

            using (AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL))
            {
                using (IDataReader rdr = db.ExecuteReader(CommandType.StoredProcedure, "DBO.SRCP_OBTER_MOTIVO_REPROCESSAMENTO", parametros))
                {
                    while (rdr.Read())
                    {
                        retorno.Add(
                            new BusinessEntities.JustificativaReprocessamento()
                            {
                                IdMotivo = (int)base.ObterValor(rdr, "IDT_MOTI_REPC"),
                                DscMotivo = (string)base.ObterValor(rdr, "DES_MOTI_REPC")
                            });
                    }
                }
            }
            return (retorno);
        }

        public List<BusinessEntities.ParametrizacaoReprocessamento> ObterParametrizacaoReprocessamento(string cdUsuario, DateTime? dtInclusao, string IcAtivo)
        {
            List<BusinessEntities.ParametrizacaoReprocessamento> retorno = new List<BusinessEntities.ParametrizacaoReprocessamento>();

            List<IDataParameter> parametros = new List<IDataParameter>();
            parametros.Add(AcessoDadosHelper.CriarParametro("@COD_USUA_RSPL", DbType.String, cdUsuario));
            parametros.Add(AcessoDadosHelper.CriarParametro("@DAT_INCU_PARM", DbType.DateTime, dtInclusao));

            if (!String.IsNullOrEmpty(IcAtivo))
            {
                parametros.Add(AcessoDadosHelper.CriarParametro("@IND_ATIV_INAT", DbType.String, IcAtivo));
            }

            using (AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL))
            {
                using (IDataReader rdr = db.ExecuteReader(CommandType.StoredProcedure, "DBO.SRCP_OBTER_PARAMETRIZACOES_REPROCESSAMENTO", parametros))
                {
                    while (rdr.Read())
                    {
                        retorno.Add(
                            new BusinessEntities.ParametrizacaoReprocessamento()
                            {
                                //CdModalidade = (string)base.ObterValor(rdr, "CD_MODALIDADE"),
                                //CdProduto = (string)base.ObterValor(rdr, "CD_PRODUTO"),
                                CdUsuario = (string)base.ObterValor(rdr, "COD_USUA_RSPL"),
                                DscObservacao = (string)base.ObterValor(rdr, "DES_PARM_REPC"),
                                DtInclusao = (DateTime)base.ObterValor(rdr, "DAT_INCU_PARM"),
                                IcAtivo = (string)base.ObterValor(rdr, "IND_ATIV_INAT"),
                                IdOrigem = (int)base.ObterValor(rdr, "IDT_ORIG"),
                                NmOrigem = (string)base.ObterValor(rdr, "NM_ORIGEM"),
                                IdReferencia = (int)base.ObterValor(rdr, "IDT_RFRC"),
                                IdReferenciaReprocessamento = (int)base.ObterValor(rdr, "IDT_RFRC_REPC"),
                                IdMotivo = (int)base.ObterValor(rdr, "IDT_MOTI_REPC"),
                                DscMotivo = (string)base.ObterValor(rdr, "DES_MOTI_REPC"),
                                DtReferenciaReprocessamento = (DateTime)base.ObterValor(rdr, "DT_REFERENCIA_REPROCESSAMENTO"),
                                DtReferencia = (DateTime)base.ObterValor(rdr, "DT_REFERENCIA"),
                            });
                    }
                }
            }
            return (retorno);
        }

        public int ExcluirParametrizacaoReprocessamento(int idOrigem, int idReferencia, int idReferenciaReprocessamento, DateTime dtInclusao)
        {
            int retorno;

            List<IDataParameter> parametros = new List<IDataParameter>();
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_ORIG", DbType.Int32, idOrigem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC", DbType.Int32, idReferencia));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC_REPC", DbType.Int32, idReferenciaReprocessamento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@DAT_INCU_PARM", DbType.DateTime, dtInclusao));

            AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);
            retorno = db.ExecuteScalar(CommandType.StoredProcedure, "DBO.SRCP_EXCLUI_PARAMETRIZACOES_REPROCESSAMENTO", parametros);

            return retorno;
        }

        public int InserirParametrizacaoReprocessamento(int idMotivo, int idOrigem, int idReferencia, int idReferenciaReprocessamento, string cdProduto, string cdModalidade, string dscObservacao, string codUsuario)
        {
            List<IDataParameter> parametros = new List<IDataParameter>();
            int retorno;

            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_MOTI_REPC", DbType.Int32, idMotivo));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_ORIG", DbType.Int32, idOrigem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC", DbType.Int32, idReferencia));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC_REPC", DbType.Int32, idReferenciaReprocessamento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_PRODUTO", DbType.String, cdProduto));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_MODALIDADE", DbType.String, cdModalidade));
            parametros.Add(AcessoDadosHelper.CriarParametro("@DES_PARM_REPC", DbType.String, dscObservacao));
            parametros.Add(AcessoDadosHelper.CriarParametro("@COD_USUA_RSPL", DbType.String, codUsuario));

            AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);
            retorno = db.ExecuteScalar(CommandType.StoredProcedure,
                                      "dbo.SRCP_INSERIR_PARAMETRIZACAO_REPROCESSAMENTO",
                                      parametros);

            return retorno;
        }

        public int ValidaDataReferencia(DateTime dtReferencia)
        {
            int retorno = 0;
            List<IDataParameter> parametros = new List<IDataParameter>();
            parametros.Add(AcessoDadosHelper.CriarParametro("@DT_REFERENCIA_REPROCESSAMENTO", DbType.DateTime, dtReferencia));

            using (AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL))
            {
                using (IDataReader rdr = db.ExecuteReader(CommandType.StoredProcedure, "dbo.SRCP_VALIDA_DATA_REPROCESSAMENTO", parametros))
                {
                    while (rdr.Read())
                    {
                        retorno = (int)base.ObterValor(rdr, "ID_REFERENCIA");
                    }
                }
            }
            return retorno;
        }

        public List<BusinessEntities.ParametrizacaoReprocessamento> ObterProdutoModalidadeReprocessamento(int idOrigem, int idReferencia, int idReferenciaReprocessamento, DateTime dtInclusao)
        {
            List<BusinessEntities.ParametrizacaoReprocessamento> retorno = new List<BusinessEntities.ParametrizacaoReprocessamento>();

            List<IDataParameter> parametros = new List<IDataParameter>();
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_ORIG", DbType.Int32, idOrigem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC", DbType.Int32, idReferencia));
            parametros.Add(AcessoDadosHelper.CriarParametro("@IDT_RFRC_REPC", DbType.Int32, idReferenciaReprocessamento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@DAT_INCU_PARM", DbType.DateTime, dtInclusao));

            using (AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL))
            {
                using (IDataReader rdr = db.ExecuteReader(CommandType.StoredProcedure, "DBO.SRCP_OBTER_PRODUTOS_REPROCESSAMENTO", parametros))
                {
                    while (rdr.Read())
                    {
                        retorno.Add(
                            new BusinessEntities.ParametrizacaoReprocessamento()
                            {
                                CdModalidade = (string)base.ObterValor(rdr, "CD_MODALIDADE"),
                                CdProduto = (string)base.ObterValor(rdr, "CD_PRODUTO"),
                                DtInclusao = (DateTime)base.ObterValor(rdr, "DAT_INCU_PARM"),
                                IdOrigem = (int)base.ObterValor(rdr, "IDT_ORIG"),
                                IdReferencia = (int)base.ObterValor(rdr, "IDT_RFRC"),
                                IdReferenciaReprocessamento = (int)base.ObterValor(rdr, "IDT_RFRC_REPC"),
                            });
                    }
                }
            }
            return retorno;
        }
    }
}
